package com.yuan.weike.mapper;

import com.yuan.weike.model.Task;
import com.yuan.weike.model.TaskWithEmployer;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface TaskMapper {

    /**
     * 插入任务
     *
     * @param task 任务对象
     * @return 插入记录数
     */
    int insert(Task task);

    /**
     * 根据ID查询任务
     *
     * @param taskId 任务ID
     * @return 任务对象
     */
    Task selectById(Long taskId);

    /**
     * 查询所有未关闭的任务（排除状态为3的任务）
     *
     * @return 任务列表
     */
    List<Task> selectAll();

    /**
     * 查询所有未关闭的任务（排除状态为3的任务）并包含雇主名称
     *
     * @return 任务列表
     */
    List<TaskWithEmployer> selectAllWithEmployer();

    /**
     * 查询所有任务（包括已关闭的任务）并包含雇主名称
     *
     * @return 任务列表
     */
    List<TaskWithEmployer> selectAllWithEmployerIncludeClosed();

    /**
     * 根据雇主ID查询任务
     *
     * @param employerId 雇主ID
     * @return 任务列表
     */
    List<Task> selectByEmployerId(Long employerId);

    /**
     * 根据任务ID查询任务并包含雇主名称
     *
     * @param taskId 任务ID
     * @return 任务对象
     */
    TaskWithEmployer selectByIdWithEmployer(Long taskId);

    /**
     * 根据任务ID列表查询任务并包含雇主名称
     *
     * @param taskIds 任务ID列表
     * @return 任务列表
     */
    List<TaskWithEmployer> selectByIds(@Param("taskIds") List<Long> taskIds);

    /**
     * 更新任务
     *
     * @param task 任务对象
     * @return 更新记录数
     */
    int update(Task task);

    /**
     * 删除任务
     *
     * @param taskId 任务ID
     * @return 删除记录数
     */
    int deleteById(Long taskId);
    
    /**
     * 统计任务总数
     *
     * @return 任务总数
     */
    int countAll();
    
    /**
     * 根据接取者ID查询任务
     *
     * @param employeeId 接取者ID
     * @return 任务列表
     */
    List<TaskWithEmployer> selectByEmployeeId(Long employeeId);
}